package savet.entidades.atributos;

import com.thoughtworks.xstream.annotations.XStreamOmitField;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import savet.entidades.Trabalhador;

@Entity
@Table
public class Salario extends Atributo {

    private String funcao = "";

    private double remuneracao;

    private List<AlteracaoFuncao> alteracoesFuncao = new LinkedList<AlteracaoFuncao>();

    private List<AlteracaoRemuneracao> alteracoesRemuneracao = new LinkedList<AlteracaoRemuneracao>();
    
    private List<Dependente> listaDependentes = new LinkedList<Dependente>();

    private List<ValeTransporte> listaValesTransporte = new LinkedList<ValeTransporte>();

    private Integer jornadaMensal = 0;

    private List<HoraExtra> listaHorasExtras = new LinkedList<HoraExtra>();

    @Transient
    @XStreamOmitField
    private Trabalhador trabalhador;

    public List<AlteracaoFuncao> getAlteracoesFuncao() {
        return alteracoesFuncao;
    }

    public void setAlteracoesFuncao(List<AlteracaoFuncao> alteracoesFuncao) {
        this.alteracoesFuncao = alteracoesFuncao;
    }

    public List<AlteracaoRemuneracao> getAlteracoesRemuneracao() {
        return alteracoesRemuneracao;
    }

    public void setAlteracoesRemuneracao(List<AlteracaoRemuneracao> alteracoesRemuneracao) {
        this.alteracoesRemuneracao = alteracoesRemuneracao;
    }

    public String getFuncao() {
        return funcao;
    }

    public void setFuncao(String funcao) {
        this.funcao = funcao;
    }

    public Integer getJornadaMensal() {
        return jornadaMensal;
    }

    public void setJornadaMensal(Integer jornadaMensal) {
        this.jornadaMensal = jornadaMensal;
    }

    public List<Dependente> getListaDependentes() {
        return listaDependentes;
    }

    public void setListaDependentes(List<Dependente> listaDependentes) {
        this.listaDependentes = listaDependentes;
    }

    public List<HoraExtra> getListaHorasExtras() {
        return listaHorasExtras;
    }

    public void setListaHorasExtras(List<HoraExtra> listaHorasExtras) {
        this.listaHorasExtras = listaHorasExtras;
    }

    public List<ValeTransporte> getListaValesTransporte() {
        return listaValesTransporte;
    }

    public void setListaValesTransporte(List<ValeTransporte> listaValesTransporte) {
        this.listaValesTransporte = listaValesTransporte;
    }

    public double getRemuneracao() {
        return remuneracao;
    }

    public void setRemuneracao(double remuneracao) {
        this.remuneracao = remuneracao;
    }

    public Trabalhador getTrabalhador() {
        return trabalhador;
    }

    public void setTrabalhador(Trabalhador trabalhador) {
        this.trabalhador = trabalhador;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Salario other = (Salario) obj;
        if ((this.funcao == null) ? (other.funcao != null) : !this.funcao.equals(other.funcao)) {
            return false;
        }
        if (Double.doubleToLongBits(this.remuneracao) != Double.doubleToLongBits(other.remuneracao)) {
            return false;
        }
        if (this.trabalhador != other.trabalhador && (this.trabalhador == null || !this.trabalhador.equals(other.trabalhador))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 53 * hash + (this.funcao != null ? this.funcao.hashCode() : 0);
        hash = 53 * hash + (int) (Double.doubleToLongBits(this.remuneracao) ^ (Double.doubleToLongBits(this.remuneracao) >>> 32));
        hash = 53 * hash + (this.trabalhador != null ? this.trabalhador.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "Salario de " + funcao + "  = " + remuneracao;
    }

}
